--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
libs/able/able/structures.py 2.0.0 (cf698d96) Text, 2.28 KB
Tff7b72import T7ee787re
Tff7b72from T7ee787collections Tff7b72import Te6edf3namedtuple
Tff7b72class T56d364AdvertisementTb4b4b4(Tffa657objectTb4b4b4)Tb4b4b4:
T8b949e"""Advertisement data record parser
>>> ad = Advertisement([2, 1, 0x6, 6, 255, 82, 83, 95, 82, 48])
>>> for data in ad:
... data
AD(ad_type=1, data=bytearray(b'\\x06'))
AD(ad_type=255, data=bytearray(b'RS_R0'))
>>> list(ad)[0].ad_type == Advertisement.ad_types.flags
True
"""
Te6edf3AD Tff7b72= Te6edf3namedtupleTb4b4b4(Ta5d6ff"Ta5d6ffADTa5d6ff"Tb4b4b4, Tb4b4b4[Ta5d6ff'Ta5d6ffad_typeTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffdataTa5d6ff'Tb4b4b4]Tb4b4b4)
Tff7b72class T56d364ad_typesTb4b4b4:
T8b949e"""
Assigned numbers for some of `advertisement data types
<https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile/>`_.
flags : "Flags" (0x01)
complete_local_name : "Complete Local Name" (0x09)
service_data : "Service Data" (0x16)
manufacturer_specific_data : "Manufacturer Specific Data" (0xff)
"""
Te6edf3flags Tff7b72= T79c0ff0x01
Te6edf3complete_local_name Tff7b72= T79c0ff0x09
Te6edf3service_data Tff7b72= T79c0ff0x16
Te6edf3manufacturer_specific_data Tff7b72= T79c0ff0xff
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdata Tff7b72= Te6edf3data
Tff7b72def Tff7b72__iter__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3AdvertisementTff7b72.Td2a8ffparseTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdataTb4b4b4)
Tf0883e@classmethod
Tff7b72def Td2a8ffparseTb4b4b4(Tff7b72clsTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4:
Te6edf3pos Tff7b72= T79c0ff0
Tff7b72while Te6edf3pos Tff7b72< Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4:
Te6edf3length Tff7b72= Te6edf3dataTb4b4b4[Te6edf3posTb4b4b4]
Tff7b72if Te6edf3length Tff7b72< T79c0ff2Tb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Te6edf3ad_type Tff7b72= Te6edf3dataTb4b4b4[Te6edf3pos Tff7b72+ T79c0ff1Tb4b4b4]
Tff7b72except Tf85149IndexErrorTb4b4b4:
Tff7b72return
Te6edf3next_pos Tff7b72= Te6edf3pos Tff7b72+ Te6edf3length Tff7b72+ T79c0ff1
Tff7b72if Te6edf3ad_typeTb4b4b4:
Te6edf3segment Tff7b72= Tffa657sliceTb4b4b4(Te6edf3pos Tff7b72+ T79c0ff2Tb4b4b4, Te6edf3next_posTb4b4b4)
Tff7b72yield Te6edf3AdvertisementTff7b72.Td2a8ffADTb4b4b4(Te6edf3ad_typeTb4b4b4, Tffa657bytearrayTb4b4b4(Te6edf3dataTb4b4b4[Te6edf3segmentTb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3pos Tff7b72= Te6edf3next_pos
Tff7b72class T56d364ServicesTb4b4b4(Tffa657dictTb4b4b4)Tb4b4b4:
T8b949e"""Services dict
>>> services = Services({'service0': {'c1-aa': 0, 'aa-c2-aa': 1},
... 'service1': {'bb-c3-bb': 2}})
>>> services.search('c3')
2
>>> services.search('c4')
"""
Tff7b72def Td2a8ffsearchTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3patternTb4b4b4, Te6edf3flagsTff7b72=Te6edf3reTff7b72.Td2a8ffIGNORECASETb4b4b4)Tb4b4b4:
T8b949e"""Search for characteristic by pattern
:param pattern: regexp pattern
:param flags: regexp flags, re.IGNORECASE by default
"""
Tff7b72for Te6edf3characteristics Tff7b72in Tff7b72selfTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3uuidTb4b4b4, Te6edf3characteristic Tff7b72in Te6edf3characteristicsTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3reTff7b72.Td2a8ffsearchTb4b4b4(Te6edf3patternTb4b4b4, Te6edf3uuidTb4b4b4, Te6edf3flagsTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3characteristic
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────